﻿Imports WindowsApplication1.saktiewebservice
Imports System.Windows.Forms.ListViewItem

Public Class Producten
    Private k_Id As Integer
    Private b_id As Integer
    Private Klant As New Klant
    Private webser As New Service1SoapClient
    Private winkelwagen As New ListView
    Public Property klant_id() As Integer
        Get
            Return k_Id
        End Get
        Set(ByVal value As Integer)
            k_Id = value
        End Set
    End Property
    Public Property bestel_id() As Integer
        Get
            Return b_id
        End Get
        Set(ByVal value As Integer)
            b_id = value
        End Set
    End Property
    Public Property klant_form() As Klant
        Get
            Return Klant
        End Get
        Set(ByVal value As Klant)
            Klant = value
        End Set
    End Property
    Private Sub NieuweBestelling_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Me.MaximumSize = Me.Size
        Me.MinimumSize = Me.Size
        Me.StartPosition = FormStartPosition.CenterScreen
        Dim k As New KlantBean

        k = webser.getKlantbyId(klant_id)
        If My.Settings.winkelwagen.Items.Count > 0 Then
            If My.Settings.username.Length > 0 Then
                If My.Settings.username.Contains(k.Gebruikersnaam) Then
                    Dim ik As ListViewItem
                    For Each ik In My.Settings.winkelwagen.Items
                        'Het huidige item moet eerst verwijderd worden uit de lijst waar die vandaan komt,
                        'indien dit niet gebeurd krijg je clone errors.
                        My.Settings.winkelwagen.Items.Remove(ik)
                        lvWinkelwagen.Items.Add(ik)
                    Next
                    My.Settings.Save()
                    lvWinkelwagen.Update()
                    berekenTeBetalenPrijs()
                End If
            End If
        End If
    End Sub

    Private Sub dgvProducten_CellDoubleClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles dgvProducten.CellDoubleClick
        Try
            Dim p As ProductBean = webser.getProductById(dgvProducten.CurrentCell.Value)

            If lvWinkelwagen.Items.Count = 0 Then
                addListViewItem(p)
            Else
                If lvWinkelwagen.Items.ContainsKey(p.Naam) Then
                    Dim lvi As ListViewItem
                    Dim lvisAantal As ListViewSubItem
                    Dim lvisTotaalPrijs As ListViewSubItem
                    Dim lvisPrijsPerStuk As ListViewSubItem
                    lvi = lvWinkelwagen.FindItemWithText(p.Naam)
                    lvisAantal = lvi.SubItems((lvi.SubItems.Count - 3))
                    lvisTotaalPrijs = lvi.SubItems((lvi.SubItems.Count - 2))
                    lvisPrijsPerStuk = lvi.SubItems((lvi.SubItems.Count - 1))

                    'Bestellingsaantal vergroten
                    Dim aantal As Integer = Integer.Parse(lvisAantal.Text)
                    aantal += 1
                    lvisAantal.Text = aantal.ToString()

                    'Totaalprijs aanpassen na het aantal dat besteld is
                    Dim totaalPrijs As Decimal = Decimal.Parse(lvisPrijsPerStuk.Text)
                    totaalPrijs *= aantal
                    lvisTotaalPrijs.Text = totaalPrijs.ToString()

                Else
                    addListViewItem(p)
                End If
            End If
        Catch ex As InvalidCastException
            MsgBox("U heeft geen id geselecteerd")
        End Try
        lvWinkelwagen.Update()
        berekenTeBetalenPrijs()
    End Sub
    Private Sub addListViewItem(ByRef p As ProductBean)
        Dim myLVI As New ListViewItem(p.Naam)
        myLVI.Name = p.Naam
        Dim myLviSub As New ListViewSubItem
        myLVI.Text = p.Naam
        myLviSub.Text = "1"
        myLVI.SubItems.Add(myLviSub)
        myLviSub = New ListViewSubItem
        myLviSub.Text = p.Prijs.ToString()
        myLVI.SubItems.Add(myLviSub)
        myLviSub = New ListViewSubItem
        myLviSub.Text = p.Prijs.ToString()
        myLVI.SubItems.Add(myLviSub)
        lvWinkelwagen.Items.Add(myLVI)
    End Sub
    Private Sub btnPlaatsBestelling_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPlaatsBestelling.Click
        Dim myLvi As ListViewItem
        Dim currentBestellingBean As New BestellingBean

        If lvWinkelwagen.Items.Count > 0 Then

            For Each myLvi In lvWinkelwagen.Items
                currentBestellingBean.besID = bestel_id
                currentBestellingBean.Aantal = Integer.Parse(myLvi.SubItems((myLvi.SubItems.Count - 3)).Text)
                currentBestellingBean.KlantID = klant_id
                currentBestellingBean.ProductID = webser.getProductId(myLvi.SubItems((0)).Text, myLvi.SubItems((myLvi.SubItems.Count - 1)).Text)
                If Not webser.insertBestelling(currentBestellingBean) Then
                    MsgBox("Er ging wat mis bij het bestellen van: " + currentBestellingBean.ProductID.ToString())
                End If
                currentBestellingBean = New BestellingBean
            Next
            MsgBox("U producten zijn besteld. Uw bestelling id is: " + bestel_id.ToString() + ". De bestellinginformatie is ook te vinden in de bestellingsgeschiedenis op het klanteninformatie scherm. Mocht u een nieuwe bestelling plaatsen word dit onder een nieuw bestelling id opgeslagen.")
            bestel_id = webser.createBestellingID()
            btnReset.PerformClick()
        Else
            MsgBox("Er zijn geen items om te bestellen.")
        End If
    End Sub

    Private Sub btnClose_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnClose.Click
        Dim k As KlantBean = webser.getKlantbyId(klant_id)
        If lvWinkelwagen.Items.Count > 0 Then
            If MsgBox("Er staan items in de winkelwagen. Wilt u deze onthouden?", MsgBoxStyle.YesNo, "Winkelwagen niet leeg. ") = MsgBoxResult.Yes Then
                'hij komt alleen de eerste keer van het laden van de form in de eerste deel, omdat de winkelwagen setting dan nog niks is
                'hierna zal hij altijd in de else zitten omdat de winkelwagen een keer gezet is met een nieuwe listview
                If My.Settings.winkelwagen Is Nothing Then
                    Dim myLVI As ListViewItem
                    For Each myLVI In lvWinkelwagen.Items
                        'Het huidige item moet eerst verwijderd worden uit de lijst waar die vandaan komt,
                        'indien dit niet gebeurd krijg je clone errors.
                        lvWinkelwagen.Items.Remove(myLVI)
                        winkelwagen.Items.Add(myLVI)
                    Next
                    My.Settings.username = k.Gebruikersnaam
                    My.Settings.winkelwagen = winkelwagen
                    My.Settings.Save()
                Else
                    Dim myLVI As ListViewItem
                    For Each myLVI In lvWinkelwagen.Items
                        'Het huidige item moet eerst verwijderd worden uit de lijst waar die vandaan komt,
                        'indien dit niet gebeurd krijg je clone errors.
                        lvWinkelwagen.Items.Remove(myLVI)
                        winkelwagen.Items.Add(myLVI)
                    Next
                    My.Settings.username = k.Gebruikersnaam
                    My.Settings.winkelwagen = winkelwagen
                    My.Settings.Save()
                End If

                MsgBox("Items opgeslagen in tijdelijke winkelwagen.")
            End If
        End If

        klant_form.Show()
        Me.Close()
    End Sub

    Private Sub btnReset_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnReset.Click
        lblCalculated.Text = "00,00"
        lvWinkelwagen.Items.Clear()
        If My.Settings.winkelwagen Is Nothing Then
            'hier hoeft niks te gebeuren, omdat winkelwagen van settings nog niet gebruikt is.
        Else
            'hier moet wel wat gebeuren omdat winkelwagen gevuld is, of een keer gevuld geweest is
            My.Settings.winkelwagen.Items.Clear()
        End If

    End Sub
    Private Sub lvWinkelwagen_DoubleClick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles lvWinkelwagen.DoubleClick
        If lvWinkelwagen.Items.Count > 0 Then
            Dim myLVI As New ListViewItem
            Dim lvisAantal As ListViewSubItem
            Dim lvisTotaalPrijs As ListViewSubItem
            Dim lvisPrijsPerStuk As ListViewSubItem

            myLVI = lvWinkelwagen.SelectedItems(0)
            MsgBox(myLVI.Text + " subcount: " + myLVI.SubItems.Count.ToString())
            Dim prodAantal As Integer
            Try
                prodAantal = Integer.Parse(InputBox("Voer het nieuwe aantal in voor product: '" + myLVI.Text + "'", "Geef nieuw aantal op."))
                ' If DocName is not empty, display the message box
                If Not prodAantal < 0 Then
                    MsgBox("Nieuwe aantal: " & prodAantal)
                    lvisAantal = myLVI.SubItems((myLVI.SubItems.Count - 3))
                    lvisTotaalPrijs = myLVI.SubItems((myLVI.SubItems.Count - 2))
                    lvisPrijsPerStuk = myLVI.SubItems((myLVI.SubItems.Count - 1))

                    lvisAantal.Text = prodAantal.ToString()

                    'Totaalprijs aanpassen na het aantal dat besteld is
                    Dim totaalPrijs As Decimal = Decimal.Parse(lvisPrijsPerStuk.Text)
                    totaalPrijs *= prodAantal
                    lvisTotaalPrijs.Text = totaalPrijs.ToString()
                End If
            Catch ex As FormatException
                MsgBox("Geen geldige waarde opgegeven")

            Catch ex As OverflowException
                MsgBox("Graag een kleiner getal opgeven.")
            End Try
        End If
        lvWinkelwagen.Update()
        berekenTeBetalenPrijs()
    End Sub

    Public Sub berekenTeBetalenPrijs()
        If lvWinkelwagen.Items.Count > 0 Then
            Dim lvi As New ListViewItem
            Dim totaalPrijs As New Decimal

            For Each lvi In lvWinkelwagen.Items
                totaalPrijs += Decimal.Parse(lvi.SubItems((lvi.SubItems.Count - 2)).Text)
            Next

            lblCalculated.Text = totaalPrijs.ToString()
        End If
    End Sub
End Class